package org.chnxi.study.leetcode.questions50.ques29;

/**
 * 使用减法来统计除数出现的次数
 *
 * 执行用时：1780 ms, 在所有 Java 提交中击败了5.15%的用户
 * 内存消耗：36.8 MB, 在所有 Java 提交中击败了7.69%的用户
 */
public class Simple01 {

    public static void main(String[] args) {

        System.out.println(divide(10 , 3));

        System.out.println(divide(10 , -3));

        System.out.println(divide(-10 , 3));

        System.out.println(divide(Integer.MIN_VALUE , 2));

    }

    public static int divide(int dividend, int divisor) {
        //防止int类型越界
        if(dividend == Integer.MIN_VALUE && divisor == -1){
            return Integer.MAX_VALUE;
        }

        if(divisor == 1){  //处理除数为1的情况
            return dividend;
        }else if(divisor == -1){  //处理除数为-1的情况
            return -dividend;
        }

        //转为负数处理，防止int类型越界
        int num1 = dividend > 0 ? -dividend : dividend;
        int num2 = divisor > 0 ? -divisor : divisor;

        //计算符号位
        int sign = 1;
        if((dividend>0 && divisor<0) || (dividend<0 && divisor>0)){
            sign = -1;
        }

        //针对0和-1，1三种结果进行处理
        if(num1 > num2){
            return 0;
        }else if(num1 == num2){
            return sign;
        }

        //循环减除数，统计次数
        int count = 0;
        while (num1 <= num2){
            num1 -= num2;
            count++;
        }

        return sign == -1 ? -count : count;
    }

}
